---
title: "05-FRP 自建内网穿透"
created: 2026-08-31
tags:
- 项目筑基
---
# FRP 自建内网穿透
[[04-内网穿透 ngork|04篇]]里接线员是ngrok雇的 免费版地址会变还限速;[[03-Cloudflare Tunnel|Tunnel]]把接线员换成了Cloudflare 但要挂自己域名、数据走人家节点。FRP是第三条路:**把接线员换成自己**——前提是得有台带公网IP(或至少有公网端口)的VPS
> 定位说明:这篇是文档学习加方案设计 FRP 我还没在自己机器上实际跑通 命令和配置都按官方文档整理 真动手时以官方仓库说明为准(全文核对点)
## 组成:一端一个程序
frp(Fast Reverse Proxy)就两个可执行文件:
- **frps** 服务端 跑在VPS上 当"服务台"
- **frpc** 客户端 跑在你内网的机器上 当"内线电话"
```mermaid
flowchart LR
A["访客
公网上任何人"] --> B["VPS: frps
监听公网端口"]
B -. "frpc 主动拨出的
长连接隧道" .-> C["内网电脑: frpc"]
C --> D["本地服务
SSH 22 / 网站 8080 / 远程桌面 3389"]
```
关键在虚线那一步:**frpc 是主动去连 frps 的** 所以你内网的机器只要能上网就行 不需要公网IP——隧道建起来之后 访客敲VPS的端口 frps顺着隧道把流量递给frpc frpc转交本地服务 和ngrok原理一模一样 只是中间那台服务器从别人家换成了自己家
## 服务端配置(VPS上)
从 [github.com/fatedier/frp releases](https://github.com/fatedier/frp/releases) 下载对应系统版本 解压出 `frps`
`frps.toml` 最小配置:
```toml
bindPort = 7000
auth.token = "换成一段只有你知道的随机字符串"
```
跑起来:
```
./frps -c frps.toml
```
安全组/防火墙记得放行 7000 以及后面客户端要用的 remotePort。长期挂建议交给 systemd 或者 docker(VPS上docker那条路见[[10-VPS Docker 部署完整指南|VPS Docker 部署完整指南]])
## 客户端配置(内网机器上)
`frpc.toml`:
```toml
serverAddr = "你VPS的公网IP"
serverPort = 7000
auth.token = "与服务端一致"
[[proxies]]
name = "my-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6022
```
跑起来:
```
./frpc -c frpc.toml
```
之后在任何地方 `ssh -p 6022 用户名@VPS公网IP` 就会落到家里那台机器的22端口 上门服务变成"敲VPS的门 VPS帮我转进去"
网站同理:localPort 改成 8080 有两种玩法——
- 简单粗暴:type 保持 tcp remotePort=8080 直接访问 `IP:8080` 什么协议都透传
- 讲究点:type 改 http 配 customDomains 需要把域名解析到VPS 由frps按域名分流(配合DNS那套 见[[06-DNS 记录与域名实战|DNS 记录与域名实战]])
## NAT VPS 能不能当 frps
我的VPS是NAT型([[02-NAT VPS|NAT VPS]]那篇记过)——没有独立公网IP 只有商家映射好的一段共享端口 这种机器想当frps:
- bindPort 必须落在商家给你的可用端口段内
- 每个remotePort也得提前在商家面板里映射好 不是想开几号就开几号
理论上可行(frp不在乎中转机是不是独立IP 只要端口能通)但我没验证过(核对点) 真要试先确认NAT VPS给了多少个TCP转发额度
## 版本坑:ini 和 toml
frp 从 0.52.0 起配置文件从 `.ini` 换成了 `.toml` 字段名全变了(`bind_port` → `bindPort`)网上大量老教程还是ini写法 直接抄会报错——看教程先看它按哪个版本写的 下载程序时也尽量和教程对版本
## 和另外两条路怎么选
一句话版:偶尔调试选ngrok 长期网站选Tunnel 有VPS想全权掌控选FRP——完整对比表见[[06-内网穿透选型对比|06-内网穿透选型对比]]
---
⬅️ [[04-内网穿透 ngork|内网穿透 ngork]] 🏠 [[00-网络与项目|00-网络与项目]] ➡️ [[06-内网穿透选型对比|内网穿透选型对比]]